import javax.swing.*;
import java.awt.*;
/*无法启动keylistener，因为那得需要实现awt包的方法。
这个类调用多线程，不断的repaint。
repaint的动作都在paint中做了。
这个类的paint方法，是回调方法。
你只需要实例化Graphic子类，实现swing框架，自会帮你回调。

* */
public class Mypanel extends JPanel implements Runnable{

    public Mypanel() {
        this.setBackground(new Color(0x334455));
    }
    int x =20;
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(x,30,40,50);//填充矩形
        g.setColor(new Color(0x3344aa));
        g.drawRect(20,x,40,40);//描摹矩形
        g.setColor(new Color(0x111111));
        g.drawLine(100,200,x,x);
        //怎么画圆
        g.drawString("超级赛亚人",100,x);
        g.setColor(Color.MAGENTA);
        g.fillOval(130,50,x-40,x-40);
    }


    @Override
    public void run() {
        while(true){
            try {
                System.out.println("我被调用了");
                Thread.sleep(500);
                x+=15;
                this.repaint();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }//end of catch
        }
    }
}


class Main2{
    public static void main(String[] args) {
        //整个GUI基于jFrame
        JFrame jFrame = new JFrame("panel");
        jFrame.setLocation(500,200);
        jFrame.setSize(600,400);
        jFrame.setLocationRelativeTo(null);//让GUI窗体智能居中
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//System.exit(0);

        //顶层容器添加二级容器
        /*jPanel相当于html中的div
        * */
        Mypanel mypanel = new Mypanel();
        jFrame.add(mypanel);

        //java多线程的两种方法之一
        Thread thread = new Thread(mypanel);
        thread.start();

        //jFrame最好放到最后，因为swing是轻量级组件，不依赖操作系统，因此恐怕某些组件没有来得及被
        //渲染就启动了jFrame。所以jFrame的这句放最后
        jFrame.setVisible(true);
    }
}
